home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / domacnost a kancelar / findgraph / fgraph.exe / {app} / TestVC / MainDoc.cpp < prev    next >
C/C++ Source or Header  |  2002-08-09  |  4KB  |  168 lines

  1. // MainDoc.cpp : implementation of the CMainDoc class
  2. // From MFC\OLE\OCLIENT
  3. // Difference: 
  4. //     use COleDocument not COleLinkingDoc
  5. //  unuse ID_OLE_EDIT_CONVERT, ID_OLE_EDIT_LINKS, ID_EDIT_PASTE_LINK, ID_EDIT_PASTE
  6.  
  7.  
  8. #include "stdafx.h"
  9. #include "Crov.h"
  10.  
  11. #include "MainDoc.h"
  12. #include "RectItem.h"
  13. #include "MainView.h"
  14.  
  15. #ifdef _DEBUG
  16. #define new DEBUG_NEW
  17. #undef THIS_FILE
  18. static char THIS_FILE[] = __FILE__;
  19. #endif
  20.  
  21.  
  22. // private clipboard format
  23. CLIPFORMAT CMainDoc::m_cfPrivate = NULL;
  24.  
  25. /////////////////////////////////////////////////////////////////////////////
  26. // CMainDoc
  27.  
  28. IMPLEMENT_DYNCREATE(CMainDoc, COleDocument)
  29.  
  30. BEGIN_MESSAGE_MAP(CMainDoc, COleDocument)
  31.     //{{AFX_MSG_MAP(CMainDoc)
  32.         // NOTE - the ClassWizard will add and remove mapping macros here.
  33.         //    DO NOT EDIT what you see in these blocks of generated code!
  34.     //}}AFX_MSG_MAP
  35.     // Enable default OLE container implementation
  36.  
  37.  
  38.     ON_UPDATE_COMMAND_UI_RANGE(ID_OLE_VERB_FIRST, ID_OLE_VERB_LAST, COleDocument::OnUpdateObjectVerbMenu)
  39. END_MESSAGE_MAP()
  40.  
  41. /////////////////////////////////////////////////////////////////////////////
  42. // CMainDoc construction/destruction
  43.  
  44. CMainDoc::CMainDoc() : m_sizeDoc(800,1050) // document size is 8x10.5
  45. {
  46.     // Use OLE compound files
  47.     EnableCompoundFile();
  48.  
  49.     m_bNeedUpdate = TRUE;
  50.     if (m_cfPrivate == NULL)
  51.         m_cfPrivate = (CLIPFORMAT)
  52.             ::RegisterClipboardFormat(_T("MFC OClient Sample"));
  53. }
  54.  
  55. CMainDoc::~CMainDoc()
  56. {
  57. }
  58.  
  59. CSize &CMainDoc::GetDocumentSize()
  60. {
  61.     return m_sizeDoc;
  62. }
  63.  
  64. BOOL CMainDoc::OnNewDocument()
  65. {
  66.     if (!COleDocument::OnNewDocument())
  67.         return FALSE;
  68.  
  69.  
  70.  
  71.     //deactivate all objects in all views
  72.     POSITION  posView = GetFirstViewPosition();
  73.     ASSERT( posView != NULL );
  74.     CMainView*  pView = DYNAMIC_DOWNCAST(CMainView, GetNextView(posView));
  75.  
  76.     pView->UnSelect();
  77.     return TRUE;
  78. }
  79.  
  80. /////////////////////////////////////////////////////////////////////////////
  81. // CMainDoc item management
  82.  
  83. CRectItem* CMainDoc::CreateItem()
  84. {
  85.     return new CRectItem(this); // does 'AddItem' automatically
  86. }
  87.  
  88. // safe delete that notifies views
  89. void CMainDoc::DeleteItem(CRectItem* pItem)
  90. {
  91.     ASSERT(pItem->GetDocument() == this);
  92.  
  93.     SetModifiedFlag();
  94.     UpdateAllViews(NULL, 1, pItem); // pItem will be deleted
  95.     pItem->Delete();    // does a 'RemoveItem' & 'delete this' automatically
  96. }
  97.  
  98. // used in View: paste
  99. void CMainDoc::AdjustItemPosition(CRectItem* pItem)
  100. {
  101.     POSITION pos = GetStartPosition();
  102.     while (pos != NULL)
  103.     {
  104.         CRectItem* pRectItem = (CRectItem*)GetNextItem(pos);
  105.         ASSERT_KINDOF(CRectItem, pItem);
  106.         if (pRectItem != pItem && pRectItem->GetRect() == pItem->GetRect())
  107.         {
  108.             pItem->m_ptPos.x += 10;
  109.             pItem->m_ptPos.y -= 10;
  110.             pos = GetStartPosition();
  111.         }
  112.     }
  113. }
  114.  
  115. /////////////////////////////////////////////////////////////////////////////
  116. // CMainDoc serialization
  117.  
  118. void CMainDoc::Serialize(CArchive& ar)
  119. {
  120. // NOTE: New easier to use serialization model -- even for OLE objects!
  121.     WORD wMagic = 0x0DAF;
  122.     if (ar.IsStoring())
  123.     {
  124.         if (HasBlankItems() &&
  125.             AfxMessageBox(IDP_SAVEINCOMPLETE, MB_YESNO|MB_ICONQUESTION) != IDYES)
  126.         {
  127.             TRACE0("Aborting save -- incomplete items found!\n");
  128.             AfxThrowArchiveException(CArchiveException::generic);
  129.         }
  130.         ar << wMagic;
  131.     }
  132.     else
  133.     {
  134.         WORD w;
  135.         ar >> w;
  136.  
  137.         if (w != wMagic)
  138.         {
  139.             TRACE0("invalid magic number at start of file\n");
  140.             AfxThrowArchiveException(CArchiveException::generic);
  141.         }
  142.     }
  143.  
  144.     // Calling the base class COleDocument enables serialization
  145.     //  of the container document's COleClientItem objects.
  146.     COleDocument::Serialize(ar);
  147. //    COleLinkingDoc::Serialize(ar);
  148.  
  149. }
  150.  
  151. /////////////////////////////////////////////////////////////////////////////
  152. // CMainDoc diagnostics
  153.  
  154. #ifdef _DEBUG
  155. void CMainDoc::AssertValid() const
  156. {
  157.     COleDocument::AssertValid();
  158. }
  159.  
  160. void CMainDoc::Dump(CDumpContext& dc) const
  161. {
  162.     COleDocument::Dump(dc);
  163. }
  164. #endif //_DEBUG
  165.  
  166. /////////////////////////////////////////////////////////////////////////////
  167. // CMainDoc commands
  168.